package com.example.origin.demo.exam;

import lombok.Data;

import java.io.Serializable;
import java.util.*;
import java.util.stream.Collectors;

@Data
//标签
public class TagDTO implements Serializable {
    private Integer tagId;
    private String tagName;
    //情感值，1=正向，0=中性，-1=负向
    private Integer affection;
    //标签关联数量
    private Integer relatedAmount;

    public static void main(String[] args) {
        List<Integer> dd = Arrays.asList(1, 2, 3, 4);
        dd.stream().skip(3).forEach(e -> System.out.println(e));
    }

    public class TestService {
        /*米米
         *目标：输入一个标签列表，长度大于10，进行以下操作：
         *1、按标签情感值倒序排列，优先展示正向标签，其次展示中性标签，最后展示负向标签，同一情感等级的标签按关联数量进行倒序排列。
         *2、如果前六个标签词均为正向标签，则将排序最靠前的负向标签提权到前六位展示，此时前六位按照关联数量排序，不再按情感值排序，原本第6位及之后的词顺延至下一位展示。
         *3、返回排序后标签1d(tāgId)为1001和1002对应的次序加和（假设输入的标签列表一定包含这两个标签1d)。
         */
        public int tagOrder(List<TagDTO> tagList) {
            // 按标签情感值倒序排列，优先展示正向标签，其次展示中性标签，最后展示负向标签，同一情感等级的标签按关联数量进行倒序排列
            List<TagDTO> collect = tagList.stream().sorted(Comparator.comparing(TagDTO::getAffection, Comparator.reverseOrder())
                    .thenComparing(TagDTO::getRelatedAmount, Comparator.reverseOrder())).collect(Collectors.toList());
            // 如果前六个标签词均为正向标签
            if (collect.stream().limit(6).allMatch(e -> e.getAffection() == 1)) {
                TagDTO tagDTO = null;
                List<TagDTO> tmpList = new ArrayList<>();

                for (int i = 0; i < collect.size(); i++) {
                    if (i > 5) {
                        if (collect.get(i).getAffection() == -1) {
                            tagDTO = collect.get(i);
                            continue;
                        }
                        tmpList.add(collect.get(i));
                    }

                }
                // 将排序最靠前的负向标签提权到前六位展示
                if (tagDTO != null) {
                    TagDTO dto = collect.get(5);
                    collect.set(5, tagDTO);
                    // 此时前六位按照关联数量排序，不再按情感值排序
                    List<TagDTO> tagDTOS = collect.stream().limit(6)
                            .sorted(Comparator.comparing(TagDTO::getRelatedAmount, Comparator.naturalOrder())).collect(Collectors.toList());
                    //原本第6位及之后的词顺延至下一位展示
                    tagDTOS.add(dto);
                    tagDTOS.addAll(tmpList);
                    collect = tagDTOS;
                }
            }
            for (int i = 0; i < collect.size(); i++) {
                // 返回排序后标签id(tāgId)为1001和1002对应的次序加和?
            }
            return 0;
        }


    }
}